// 输出
console.log('hello world');

// 变量
let age = 30;
age = 31;
console.log(age);

// 数据类型
const username = "John";
const age_1 = 30;
const rate = 4.5;
const isCool = true;
const x = null;
const y = undefined;
let z;
console.log(typeof z)
/*string 、 number 、 boolean 、 null 、 undefined 、 bigint 、 symbol 、 obje
ct
ps：其中 object 包含： Array 、 Function 、 Date、 Error
*/

// 字符串
console.log("My name is " + username + " and I am age");
const hello = ` "My name is ${username} and I am ${age_1}" `;
console.log(hello);

//字符串内置方法
const s = "Hello World!";
console.log(s.length);// 长度
console.log(s.toUpperCase());// 大写
console.log(s.toLowerCase());// 小写
console.log(s.substring(0, 5).toUpperCase());// 分割
console.log(s.split(''));// 转换成数组
const a = "technology,computers,it,code";
console.log(a.split(","))// 分割单词

// 数组
const numbers = new Array(1, 2, 3, 4, 5);
console.log(numbers);
const fruits = ["apple", "orange", "pear", 10, true];
console.log(fruits);

console.log(fruits[4]);// 索引

fruits[1] = "grape";// 修改
console.log(fruits);

fruits.push("watermelon");// 末尾添加
fruits.unshift("mango");// 首部添加
console.log(fruits);

fruits.pop();// 删除末尾
console.log(fruits);

console.log(Array.isArray(fruits));// 判断数组

console.log(fruits.indexOf("pear"));// 元素索引

// 对象
const person = {
    firstname: "John",
    lastname: "Deo",
    age: 40,
    hobbies: ["music", "movie", "sport"],
    address: {
        street: '50 main st',
        city: "Boston",
        state: "MA",
    },// 注意逗号
};// 注意分号
console.log(person);
console.log(person.firstname, person.hobbies[1]);

const {// 解构(将同名变量从person中抽取出来)
    firstname,
    lastname,
    address: { city },
} = person;
console.log(lastname);
console.log(city);

person.email = "666@gmail.com";// 添加属性
console.log(person);

// 对象数组
const todos = [
    {
        id: 1,
        text: "Take out trash",
        isComplicated:true,
    },
    {
        id: 2,
        text: "Meeting with boss",
        isComplicated:true,
    },
    {
        id: 3,
        text: "Dentist appt",
        isComplicated:false,
    },
]
console.log(todos);
console.log(todos[1].text);

// JavaScript将对象数组转换成json
// JSON 是一种轻量级的数据交换格式，它以文本形式表示数据，具有良好的可读性和可解析性，常用于前后端数据传输、配置文件等场景。
const todoJSON = JSON.stringify(todos);
console.log(todoJSON);

// 分支
const i = 0;
const j = "20";
if (i === 10)// ===考虑数据类型
{
    console.log('i is 10');
}
else
{
    console.log("i is not 10");      
}
if (j == 20)// ==不考虑数据类型
{
    console.log('j is 20');    
}

// 循环
// for while 

// 三目运算符
const k = 10;
const color = x > 10 ? "red" : "blue"; 
console.log(color);

// 函数
function add(a, b) {
    return a + b;
}
let result = add(3, 5);
console.log(result); // 输出 8

let subtract = function (a, b) {
    return a - b;
};// 匿名函数

// 无参数的箭头函数
let sayHello = () => {
    console.log("Hello, World!");
};

// 有一个参数的箭头函数
let greet = name => {
    console.log(`Hello, ${name}!`);
};

// 有多个参数的箭头函数
let add = (a, b) => {
    return a + b;
};

// 简洁写法，当函数体只有一条语句时可以省略花括号和 return 关键字
let multiply = (a, b) => a * b;

